﻿using System.Collections.Generic;
using System.Data;
using FancyIdea.PingShui.Core.Dal;
using FancyIdea.PingShui.Core.DbHelper;
using FancyIdea.PingShui.Core.Model;
using FancyIdea.PingShui.Core.Util;

namespace FancyIdea.PingShui.Core.Bll
{
    /// <summary>
    /// 税务机关和人员 的摘要说明
    /// </summary>
    public class 税务机关和人员 : HttpHandler
    {
        #region 税务机关
        private void SaveUnit()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
                权限列表.税务机关管理维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string method = GetStringValue("m");
            string 税务机关代码 = GetStringValue("税务机关代码");
            string 税务机关名称 = GetStringValue("税务机关名称");
            if (method.Equals("add"))
            {
                if (税务机关和人员操作.AddUnit(税务机关代码, 税务机关名称))
                {
                    WriteReturnXml(0, "", null);
                }
                else
                {
                    WriteReturnXml(-1, "添加失败", null);
                }
            }
            else if (method.Equals("edit"))
            {
                if (税务机关和人员操作.UpdateUnit(税务机关代码, 税务机关名称))
                {
                    WriteReturnXml(0, "", null);
                }
                else
                {
                    WriteReturnXml(-1, "修改失败", null);
                }
            }
        }

        private void GetUnit()
        {
            string 税务机关代码 = GetStringValue("税务机关代码");
            if (string.IsNullOrEmpty(税务机关代码))
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            DataRow row = 税务机关和人员操作.GetUnit(税务机关代码);
            if (row != null)
            {
                WriteReturnXml(0, "", row.Table);
            }
            else
            {
                WriteReturnXml(-1, "未查询到数据", null);
            }
        }

        private void ListUnit()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
                权限列表.税务机关管理维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            SimpleQueryBuilder SqlBuilder
          = new SimpleQueryBuilder()
          {
              FieldsString = @"a.*",
              FromString = @"from 税务机关表 a ",
              PageOrderString = "order by a.税务机关代码",
              FieldsStringForCount = "count(a.税务机关代码) as count"
          };
            List<string> con = new List<string>();
            con.Add("a.税务机关代码 like '%" + GetStringValue("税务机关代码") + "%'");
            con.Add("a.税务机关名称 like '%" + GetStringValue("税务机关名称") + "%'");
            SqlBuilder.Conditions = con.ToArray();
            int page = GetInt32Value("page") < 1 ? 1 : GetInt32Value("page");
            string sql = SqlBuilder.BuildQuerySql(page, Const.dataPerPage);
            string sql1 = SqlBuilder.BuildQueryStatisticSql();
            DataTable table = CmdUtil.ExcuteDataTable(sql);
            object o = CmdUtil.ExcuteScalar(sql1);
            int count = int.Parse(o == null ? "0" : o.ToString());
            int total = count % Const.dataPerPage == 0 ?
                count / Const.dataPerPage : (count / Const.dataPerPage) + 1;
            WriteListXml(0, "成功", count, Const.dataPerPage, total, page, table);
        }

        private void DropDownUnit()
        {
            DataTable table = 税务机关和人员操作.GetUnitDropDown();
            if (table != null && table.Rows.Count > 0)
            {
                WriteReturnXml(0, null, table);
            }
            else
            {
                WriteReturnXml(-1, "获取数据失败", table);
            }
        }

        private void DeleteUnit()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
                权限列表.税务机关管理维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string 税务机关代码 = GetStringValue("税务机关代码");
            if (string.IsNullOrEmpty(税务机关代码))
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            if (税务机关和人员操作.DeleteUnit(税务机关代码))
            {
                WriteReturnXml(0, "0", null);
            }
            else
            {
                WriteReturnXml(-1, "修改失败", null);
            }
        }

        private void DeleteUnitMuti()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
                权限列表.税务机关管理维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string[] 税务机关代码 = GetStringsValue("税务机关代码");
            if (税务机关和人员操作.DeleteUnit(税务机关代码))
            {
                WriteReturnXml(0, "", null);
            }
            else
            {
                WriteReturnXml(-1, "修改失败", null);
            }
        }
        #endregion

        #region 税务人员
        private void SavePerson()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
                权限列表.税务人员及权限维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string method = GetStringValue("m");
            string 税务机关代码 = GetStringValue("税务机关代码");
            string 税务人员代码 = GetStringValue("税务人员代码");
            string 税务人员姓名 = GetStringValue("税务人员姓名");
            string 税务人员性别 = GetStringValue("税务人员性别");
            string 操作密码 = GetStringValue("操作密码");
            string 权限 = GetStringValue("权限");
            if (method.Equals("add"))
            {
                if (税务机关和人员操作.AddPerson(税务机关代码, 税务人员代码, 税务人员姓名,
                    税务人员性别, 操作密码, 权限))
                {
                    WriteReturnXml(0, "", null);
                }
                else
                {
                    WriteReturnXml(-1, "添加失败", null);
                }
            }
            else
            {
                if (税务机关和人员操作.UpdatePerson(税务机关代码, 税务人员代码, 税务人员姓名,
                    税务人员性别, 权限))
                {
                    WriteReturnXml(0, "", null);
                }
                else
                {
                    WriteReturnXml(-1, "修改失败", null);
                }
            }
        }

        private void GetPerson()
        {
            string 税务人员代码 = GetStringValue("税务人员代码");
            if (string.IsNullOrEmpty(税务人员代码))
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            DataRow row = 税务机关和人员操作.GetPersonInfo(税务人员代码);
            if (row != null)
            {
                WriteReturnXml(0, "", row.Table);
            }
            else
            {
                WriteReturnXml(-1, "未查询到数据", null);
            }
        }

        private void ListPerson()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
                权限列表.税务人员及权限维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            SimpleQueryBuilder SqlBuilder
                     = new SimpleQueryBuilder()
                     {
                         FieldsString = @"a.*,b.税务机关名称 as 税务机关",
                         FromString = @"from 税务人员表 a 
left join 税务机关表 b on b.税务机关代码=a.税务机关代码 ",
                         PageOrderString = "order by a.税务人员代码",
                         FieldsStringForCount = "count(a.税务人员代码) as count"
                     };
            List<string> con = new List<string>();
            con.Add("a.税务人员代码 like '%" + GetStringValue("税务人员代码") + "%'");
            con.Add("a.税务人员姓名 like '%" + GetStringValue("税务人员姓名") + "%'");
            SqlBuilder.Conditions = con.ToArray();
            int page = GetInt32Value("page") < 1 ? 1 : GetInt32Value("page");
            string sql = SqlBuilder.BuildQuerySql(page, Const.dataPerPage);
            string sql1 = SqlBuilder.BuildQueryStatisticSql();
            DataTable table = CmdUtil.ExcuteDataTable(sql);
            object o = CmdUtil.ExcuteScalar(sql1);
            int count = int.Parse(o == null ? "0" : o.ToString());
            int total = count % Const.dataPerPage == 0 ?
                count / Const.dataPerPage : (count / Const.dataPerPage) + 1;
            //XmlUtil.WriteListXml(0, "成功", count, Const.dataPerPage, total, page, table, "税务人员.xml");
            WriteListXml(0, "成功", count, Const.dataPerPage, total, page, table);
        }

        private void DropDownPerson()
        {
            DataTable table = 税务机关和人员操作.GetPersonDropDown();
            if (table != null && table.Rows.Count > 0)
            {
                WriteReturnXml(0, null, table);
            }
            else
            {
                WriteReturnXml(-1, "获取数据失败", table);
            }
        }

        private void DeletePerson()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
                权限列表.税务人员及权限维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string 税务人员代码 = GetStringValue("税务人员代码");
            if (string.IsNullOrEmpty(税务人员代码))
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            if (税务机关和人员操作.DeletePerson(税务人员代码))
            {
                WriteReturnXml(0, "", null);
            }
            else
            {
                WriteReturnXml(-1, "删除失败", null);
            }
        }

        private void DeletePersonMulti()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
                权限列表.税务人员及权限维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string[] 税务人员代码 = GetStringsValue("税务人员代码");
            if (税务机关和人员操作.DeletePerson(税务人员代码))
            {
                WriteReturnXml(0, "", null);
            }
            else
            {
                WriteReturnXml(-1, "删除失败", null);
            }
        }

        private void Login()
        {
            string 税务人员代码 = GetStringValue("税务人员代码");
            string 密码 = GetStringValue("密码");
            DataRow row = 税务机关和人员操作.Login(税务人员代码, 密码);
            if (row != null)
            {
                // 记录登录的用户代码
                Session.Add("username", row["税务人员代码"].ToString());

                // 记录登录的用户对象
                Session.Add("user", new User()
                {
                    Code = row["税务人员代码"].ToString(),
                    Name = row["税务人员姓名"].ToString(),
                    Permissions = row["权限"].ToString()
                });
                WriteReturnXml(0, "", row.Table);
            }
            else
            {
                WriteReturnXml(-1, "登录失败", null);
            }
        }



        public UserList GetUserList()
        {
            UserList users = Session["users"] as UserList;
            if (users == null)
            {
                users = new UserList();
                Session.Add("users", users);
            }

            if (users.Count < 1)
            {
                // 将当前登录用户加入，算第1个
                User current = Session["user"] as User;
                if (current != null)
                {
                    users.Add(current);
                }
            }

            return users;
        }

        private void VerifyUser()
        {
            string 税务人员代码 = GetStringValue("username");
            string 密码 = GetStringValue("password");
            DataRow row = 税务机关和人员操作.Login(税务人员代码, 密码);
            if (row != null)
            {
                UserList users = GetUserList();

                users.Add(new User()
                {
                    Code = 税务人员代码,
                    Name = row["税务人员姓名"].ToString(),
                    Permissions = row["权限"].ToString()
                });

                WriteReturnXml(0, "", users.ToDataTable());
            }
            else
            {
                WriteReturnXml(-1, "登录失败", null);
            }
        }

        private void GetVerifiedUsers()
        {
            WriteReturnXml(0, "", GetUserList().ToDataTable());
        }

        private void DeleteUser()
        {
            string 税务人员代码 = GetStringValue("税务人员代码");
            if (string.IsNullOrEmpty(税务人员代码))
            {
                WriteReturnXml(-127, "参数传入错误", null);
                return;
            }
            UserList users = Session["users"] as UserList;
            if (users == null || users.Count < 1)
            {
                WriteReturnXml(-127, "没有操作员信息", null);
                return;
            }
            users.Remove(税务人员代码);
            WriteReturnXml(0, "", users.ToDataTable());
        }

        private void Logout()
        {
            Session.Abandon();
            WriteReturnXml(0, "", null);
        }

        private void UpdatePassword()
        {
            string newPwd = GetStringValue("新密码");
            string oldPwd = GetStringValue("旧密码");
            string username = "";
            string method = GetStringValue("m");
            if (method.Equals("self"))//表示修改自己的密码
            {
                username = Session["username"] == null ?
                "" : Session["username"].ToString();
                if (税务机关和人员操作.UpdatePassword(username, oldPwd, newPwd))
                {
                    WriteReturnXml(0, "", null);
                }
                else
                {
                    WriteReturnXml(-1, "密码修改失败", null);
                }
            }
            else if (method.Equals("manager"))//表示管理员修改密码
            {
                username = GetStringValue("税务人员代码");
                if (税务机关和人员操作.ResetPassword(username, newPwd))
                {
                    WriteReturnXml(0, "", null);
                }
                else
                {
                    WriteReturnXml(-1, "密码重置失败", null);
                }
            }

        }

        private void GetLoginState()
        {
            string 税务人员代码 = Session["username"] == null ?
                "" : Session["username"].ToString();
            DataRow row = 税务机关和人员操作.GetLoginState(税务人员代码);
            if (row != null)
            {
                WriteReturnXml(0, "", row.Table);
            }
            else
            {
                WriteReturnXml(-1, "获取失败", null);
            }
        }

        private void GetPowerList()
        {
            DataTable table = CommUtil.ConvertEnumToDataTable(typeof(权限列表));
            WriteReturnXml(0, null, table);
        }

        private void SavePower()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
                权限列表.税务人员及权限维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string 税务人员代码 = GetStringValue("税务人员代码");
            string 权限 = GetStringValue("权限");
            if (税务机关和人员操作.SetPower(税务人员代码, 权限))
            {
                WriteReturnXml(0, null, null);
            }
            else
            {
                WriteReturnXml(-1, "设置权限失败", null);
            }
        }
        #endregion
    }
}